﻿using Prometheus;
using System.Diagnostics.Metrics;

namespace CTP.CRM.Core.Prometheus.Custom
{
    public class PrometheusMetricsHub
    {
        //
        // 摘要:
        //     监控计数器维度统计容器
        public Dictionary<string, Counter> Counters { get; set; } = new Dictionary<string, Counter>();


        //
        // 摘要:
        //     监控仪表盘维度统计容器
        public Dictionary<string, Gauge> Gauges { get; set; } = new Dictionary<string, Gauge>();


        //
        // 摘要:
        //     创建计数器容器
        //
        // 参数:
        //   key:
        //
        //   desc:
        public void CreateCounter(string key, string desc)
        {
            if (!Counters.ContainsKey(key))
            {
                Counters.Add(key, Metrics.CreateCounter(key, desc));
            }
        }

        //
        // 摘要:
        //     创建仪表盘容器
        //
        // 参数:
        //   key:
        //
        //   desc:
        public void CreateGauge(string key, string desc)
        {
            if (!Gauges.ContainsKey(key))
            {
                Gauges.Add(key, Metrics.CreateGauge(key, desc));
            }
        }

        //
        // 摘要:
        //     根据维度类型获取监控实例
        //
        // 参数:
        //   prometheusEnum:
        //
        //   key:
        //
        // 类型参数:
        //   TContainer:
        public TContainer GetContainer<TContainer>(PrometheusEnum prometheusEnum, string key) where TContainer : class
        {
            if (prometheusEnum == PrometheusEnum.Counter && Counters.ContainsKey(key))
            {
                return Counters.GetValueOrDefault(key) as TContainer;
            }

            if (prometheusEnum == PrometheusEnum.Gauge && Gauges.ContainsKey(key))
            {
                return Gauges.GetValueOrDefault(key) as TContainer;
            }

            return null;
        }
    }
}
